/* Copyright 2018 JDCLOUD.COM

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http:#www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

IAM API
IAM相关接口

OpenAPI spec version: v1
Contact: 

NOTE: This class is auto generated by the jdcloud code generator program.
*/


#ifndef IamClient_h
#define IamClient_h


#import <JDCloudOCSDKCore/JDCloudOCSDKCore.h>
#import <JDCloudOCSDKIam/IamApiModel.h>

@interface IamClient : NSObject<JDCloudClient>{
    @private
    NSString* _userAgent;
    NSString* _serviceName;
    NSString* _version;
    }

    @property (strong,readonly,nonatomic) NSString* userAgent;

    @property (strong,readonly,nonatomic) NSString* serviceName;

    @property (strong,readonly,nonatomic) NSString* version;

    @property (strong,nonatomic) NSString* contentType;

    @property (strong,nonatomic) Credential* credential;

    @property (strong,nonatomic) SDKEnvironment* sdkEnvironment;

    @property (strong,nonatomic) NSMutableDictionary* customHeader;

    @property  (strong,nonatomic) NSString* httpRequestProtocol;

    -(void) addCustomerHeaderWithKey:(NSString*) key
    value:(NSString*) value;

    -(id)initWithGlobalConfig;

    -(id)initWithCredential:(Credential*)credential
    sdkEnvironment:(SDKEnvironment*)sdkEnvironment;
    -(id)initWithCredential:(Credential*)credential;
    /**
    deleteSubUser sync request
    @param deleteSubUserRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `deleteSubUserResponse` the request response data model
    */
    -(NSDictionary*) deleteSubUserSyncWithRequest:(IamDeleteSubUserRequest*) deleteSubUserRequest;

    -(void)deleteSubUserAsyncWithRequest:(IamDeleteSubUserRequest*) deleteSubUserRequest
    completionHandler:(void(^)(int statusCode,IamDeleteSubUserResponse* _Nullable deleteSubUserResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeGroups sync request
    @param describeGroupsRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeGroupsResponse` the request response data model
    */
    -(NSDictionary*) describeGroupsSyncWithRequest:(IamDescribeGroupsRequest*) describeGroupsRequest;

    -(void)describeGroupsAsyncWithRequest:(IamDescribeGroupsRequest*) describeGroupsRequest
    completionHandler:(void(^)(int statusCode,IamDescribeGroupsResponse* _Nullable describeGroupsResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeAttachedGroupPolicies sync request
    @param describeAttachedGroupPoliciesRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeAttachedGroupPoliciesResponse` the request response data model
    */
    -(NSDictionary*) describeAttachedGroupPoliciesSyncWithRequest:(IamDescribeAttachedGroupPoliciesRequest*) describeAttachedGroupPoliciesRequest;

    -(void)describeAttachedGroupPoliciesAsyncWithRequest:(IamDescribeAttachedGroupPoliciesRequest*) describeAttachedGroupPoliciesRequest
    completionHandler:(void(^)(int statusCode,IamDescribeAttachedGroupPoliciesResponse* _Nullable describeAttachedGroupPoliciesResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    createSubUser sync request
    @param createSubUserRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `createSubUserResponse` the request response data model
    */
    -(NSDictionary*) createSubUserSyncWithRequest:(IamCreateSubUserRequest*) createSubUserRequest;

    -(void)createSubUserAsyncWithRequest:(IamCreateSubUserRequest*) createSubUserRequest
    completionHandler:(void(^)(int statusCode,IamCreateSubUserResponse* _Nullable createSubUserResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    deletePolicy sync request
    @param deletePolicyRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `deletePolicyResponse` the request response data model
    */
    -(NSDictionary*) deletePolicySyncWithRequest:(IamDeletePolicyRequest*) deletePolicyRequest;

    -(void)deletePolicyAsyncWithRequest:(IamDeletePolicyRequest*) deletePolicyRequest
    completionHandler:(void(^)(int statusCode,IamDeletePolicyResponse* _Nullable deletePolicyResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    detachRolePolicy sync request
    @param detachRolePolicyRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `detachRolePolicyResponse` the request response data model
    */
    -(NSDictionary*) detachRolePolicySyncWithRequest:(IamDetachRolePolicyRequest*) detachRolePolicyRequest;

    -(void)detachRolePolicyAsyncWithRequest:(IamDetachRolePolicyRequest*) detachRolePolicyRequest
    completionHandler:(void(^)(int statusCode,IamDetachRolePolicyResponse* _Nullable detachRolePolicyResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeSubUserGroups sync request
    @param describeSubUserGroupsRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeSubUserGroupsResponse` the request response data model
    */
    -(NSDictionary*) describeSubUserGroupsSyncWithRequest:(IamDescribeSubUserGroupsRequest*) describeSubUserGroupsRequest;

    -(void)describeSubUserGroupsAsyncWithRequest:(IamDescribeSubUserGroupsRequest*) describeSubUserGroupsRequest
    completionHandler:(void(^)(int statusCode,IamDescribeSubUserGroupsResponse* _Nullable describeSubUserGroupsResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeGroup sync request
    @param describeGroupRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeGroupResponse` the request response data model
    */
    -(NSDictionary*) describeGroupSyncWithRequest:(IamDescribeGroupRequest*) describeGroupRequest;

    -(void)describeGroupAsyncWithRequest:(IamDescribeGroupRequest*) describeGroupRequest
    completionHandler:(void(^)(int statusCode,IamDescribeGroupResponse* _Nullable describeGroupResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeSubUser sync request
    @param describeSubUserRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeSubUserResponse` the request response data model
    */
    -(NSDictionary*) describeSubUserSyncWithRequest:(IamDescribeSubUserRequest*) describeSubUserRequest;

    -(void)describeSubUserAsyncWithRequest:(IamDescribeSubUserRequest*) describeSubUserRequest
    completionHandler:(void(^)(int statusCode,IamDescribeSubUserResponse* _Nullable describeSubUserResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    updatePolicyDescription sync request
    @param updatePolicyDescriptionRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `updatePolicyDescriptionResponse` the request response data model
    */
    -(NSDictionary*) updatePolicyDescriptionSyncWithRequest:(IamUpdatePolicyDescriptionRequest*) updatePolicyDescriptionRequest;

    -(void)updatePolicyDescriptionAsyncWithRequest:(IamUpdatePolicyDescriptionRequest*) updatePolicyDescriptionRequest
    completionHandler:(void(^)(int statusCode,IamUpdatePolicyDescriptionResponse* _Nullable updatePolicyDescriptionResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    enabledUserAccessKey sync request
    @param enabledUserAccessKeyRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `enabledUserAccessKeyResponse` the request response data model
    */
    -(NSDictionary*) enabledUserAccessKeySyncWithRequest:(IamEnabledUserAccessKeyRequest*) enabledUserAccessKeyRequest;

    -(void)enabledUserAccessKeyAsyncWithRequest:(IamEnabledUserAccessKeyRequest*) enabledUserAccessKeyRequest
    completionHandler:(void(^)(int statusCode,IamEnabledUserAccessKeyResponse* _Nullable enabledUserAccessKeyResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    updateGroup sync request
    @param updateGroupRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `updateGroupResponse` the request response data model
    */
    -(NSDictionary*) updateGroupSyncWithRequest:(IamUpdateGroupRequest*) updateGroupRequest;

    -(void)updateGroupAsyncWithRequest:(IamUpdateGroupRequest*) updateGroupRequest
    completionHandler:(void(^)(int statusCode,IamUpdateGroupResponse* _Nullable updateGroupResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    removePermissionOfSubUser sync request
    @param removePermissionOfSubUserRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `removePermissionOfSubUserResponse` the request response data model
    */
    -(NSDictionary*) removePermissionOfSubUserSyncWithRequest:(IamRemovePermissionOfSubUserRequest*) removePermissionOfSubUserRequest;

    -(void)removePermissionOfSubUserAsyncWithRequest:(IamRemovePermissionOfSubUserRequest*) removePermissionOfSubUserRequest
    completionHandler:(void(^)(int statusCode,IamRemovePermissionOfSubUserResponse* _Nullable removePermissionOfSubUserResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeAttachedSubUserPolicies sync request
    @param describeAttachedSubUserPoliciesRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeAttachedSubUserPoliciesResponse` the request response data model
    */
    -(NSDictionary*) describeAttachedSubUserPoliciesSyncWithRequest:(IamDescribeAttachedSubUserPoliciesRequest*) describeAttachedSubUserPoliciesRequest;

    -(void)describeAttachedSubUserPoliciesAsyncWithRequest:(IamDescribeAttachedSubUserPoliciesRequest*) describeAttachedSubUserPoliciesRequest
    completionHandler:(void(^)(int statusCode,IamDescribeAttachedSubUserPoliciesResponse* _Nullable describeAttachedSubUserPoliciesResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    updatePolicy sync request
    @param updatePolicyRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `updatePolicyResponse` the request response data model
    */
    -(NSDictionary*) updatePolicySyncWithRequest:(IamUpdatePolicyRequest*) updatePolicyRequest;

    -(void)updatePolicyAsyncWithRequest:(IamUpdatePolicyRequest*) updatePolicyRequest
    completionHandler:(void(^)(int statusCode,IamUpdatePolicyResponse* _Nullable updatePolicyResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    addSubUserToGroup sync request
    @param addSubUserToGroupRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `addSubUserToGroupResponse` the request response data model
    */
    -(NSDictionary*) addSubUserToGroupSyncWithRequest:(IamAddSubUserToGroupRequest*) addSubUserToGroupRequest;

    -(void)addSubUserToGroupAsyncWithRequest:(IamAddSubUserToGroupRequest*) addSubUserToGroupRequest
    completionHandler:(void(^)(int statusCode,IamAddSubUserToGroupResponse* _Nullable addSubUserToGroupResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    createGroup sync request
    @param createGroupRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `createGroupResponse` the request response data model
    */
    -(NSDictionary*) createGroupSyncWithRequest:(IamCreateGroupRequest*) createGroupRequest;

    -(void)createGroupAsyncWithRequest:(IamCreateGroupRequest*) createGroupRequest
    completionHandler:(void(^)(int statusCode,IamCreateGroupResponse* _Nullable createGroupResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    attachRolePolicy sync request
    @param attachRolePolicyRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `attachRolePolicyResponse` the request response data model
    */
    -(NSDictionary*) attachRolePolicySyncWithRequest:(IamAttachRolePolicyRequest*) attachRolePolicyRequest;

    -(void)attachRolePolicyAsyncWithRequest:(IamAttachRolePolicyRequest*) attachRolePolicyRequest
    completionHandler:(void(^)(int statusCode,IamAttachRolePolicyResponse* _Nullable attachRolePolicyResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    deleteSubUserAccessKey sync request
    @param deleteSubUserAccessKeyRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `deleteSubUserAccessKeyResponse` the request response data model
    */
    -(NSDictionary*) deleteSubUserAccessKeySyncWithRequest:(IamDeleteSubUserAccessKeyRequest*) deleteSubUserAccessKeyRequest;

    -(void)deleteSubUserAccessKeyAsyncWithRequest:(IamDeleteSubUserAccessKeyRequest*) deleteSubUserAccessKeyRequest
    completionHandler:(void(^)(int statusCode,IamDeleteSubUserAccessKeyResponse* _Nullable deleteSubUserAccessKeyResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    disabledUserAccessKey sync request
    @param disabledUserAccessKeyRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `disabledUserAccessKeyResponse` the request response data model
    */
    -(NSDictionary*) disabledUserAccessKeySyncWithRequest:(IamDisabledUserAccessKeyRequest*) disabledUserAccessKeyRequest;

    -(void)disabledUserAccessKeyAsyncWithRequest:(IamDisabledUserAccessKeyRequest*) disabledUserAccessKeyRequest
    completionHandler:(void(^)(int statusCode,IamDisabledUserAccessKeyResponse* _Nullable disabledUserAccessKeyResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    createRole sync request
    @param createRoleRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `createRoleResponse` the request response data model
    */
    -(NSDictionary*) createRoleSyncWithRequest:(IamCreateRoleRequest*) createRoleRequest;

    -(void)createRoleAsyncWithRequest:(IamCreateRoleRequest*) createRoleRequest
    completionHandler:(void(^)(int statusCode,IamCreateRoleResponse* _Nullable createRoleResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeSubUserPermissions sync request
    @param describeSubUserPermissionsRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeSubUserPermissionsResponse` the request response data model
    */
    -(NSDictionary*) describeSubUserPermissionsSyncWithRequest:(IamDescribeSubUserPermissionsRequest*) describeSubUserPermissionsRequest;

    -(void)describeSubUserPermissionsAsyncWithRequest:(IamDescribeSubUserPermissionsRequest*) describeSubUserPermissionsRequest
    completionHandler:(void(^)(int statusCode,IamDescribeSubUserPermissionsResponse* _Nullable describeSubUserPermissionsResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    updatePermission sync request
    @param updatePermissionRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `updatePermissionResponse` the request response data model
    */
    -(NSDictionary*) updatePermissionSyncWithRequest:(IamUpdatePermissionRequest*) updatePermissionRequest;

    -(void)updatePermissionAsyncWithRequest:(IamUpdatePermissionRequest*) updatePermissionRequest
    completionHandler:(void(^)(int statusCode,IamUpdatePermissionResponse* _Nullable updatePermissionResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    attachSubUserPolicy sync request
    @param attachSubUserPolicyRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `attachSubUserPolicyResponse` the request response data model
    */
    -(NSDictionary*) attachSubUserPolicySyncWithRequest:(IamAttachSubUserPolicyRequest*) attachSubUserPolicyRequest;

    -(void)attachSubUserPolicyAsyncWithRequest:(IamAttachSubUserPolicyRequest*) attachSubUserPolicyRequest
    completionHandler:(void(^)(int statusCode,IamAttachSubUserPolicyResponse* _Nullable attachSubUserPolicyResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeSubUsers sync request
    @param describeSubUsersRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeSubUsersResponse` the request response data model
    */
    -(NSDictionary*) describeSubUsersSyncWithRequest:(IamDescribeSubUsersRequest*) describeSubUsersRequest;

    -(void)describeSubUsersAsyncWithRequest:(IamDescribeSubUsersRequest*) describeSubUsersRequest
    completionHandler:(void(^)(int statusCode,IamDescribeSubUsersResponse* _Nullable describeSubUsersResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    disableSubUserAccessKey sync request
    @param disableSubUserAccessKeyRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `disableSubUserAccessKeyResponse` the request response data model
    */
    -(NSDictionary*) disableSubUserAccessKeySyncWithRequest:(IamDisableSubUserAccessKeyRequest*) disableSubUserAccessKeyRequest;

    -(void)disableSubUserAccessKeyAsyncWithRequest:(IamDisableSubUserAccessKeyRequest*) disableSubUserAccessKeyRequest
    completionHandler:(void(^)(int statusCode,IamDisableSubUserAccessKeyResponse* _Nullable disableSubUserAccessKeyResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describePolicies sync request
    @param describePoliciesRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describePoliciesResponse` the request response data model
    */
    -(NSDictionary*) describePoliciesSyncWithRequest:(IamDescribePoliciesRequest*) describePoliciesRequest;

    -(void)describePoliciesAsyncWithRequest:(IamDescribePoliciesRequest*) describePoliciesRequest
    completionHandler:(void(^)(int statusCode,IamDescribePoliciesResponse* _Nullable describePoliciesResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    createPolicy sync request
    @param createPolicyRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `createPolicyResponse` the request response data model
    */
    -(NSDictionary*) createPolicySyncWithRequest:(IamCreatePolicyRequest*) createPolicyRequest;

    -(void)createPolicyAsyncWithRequest:(IamCreatePolicyRequest*) createPolicyRequest
    completionHandler:(void(^)(int statusCode,IamCreatePolicyResponse* _Nullable createPolicyResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describePermissions sync request
    @param describePermissionsRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describePermissionsResponse` the request response data model
    */
    -(NSDictionary*) describePermissionsSyncWithRequest:(IamDescribePermissionsRequest*) describePermissionsRequest;

    -(void)describePermissionsAsyncWithRequest:(IamDescribePermissionsRequest*) describePermissionsRequest
    completionHandler:(void(^)(int statusCode,IamDescribePermissionsResponse* _Nullable describePermissionsResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeRolePolicies sync request
    @param describeRolePoliciesRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeRolePoliciesResponse` the request response data model
    */
    -(NSDictionary*) describeRolePoliciesSyncWithRequest:(IamDescribeRolePoliciesRequest*) describeRolePoliciesRequest;

    -(void)describeRolePoliciesAsyncWithRequest:(IamDescribeRolePoliciesRequest*) describeRolePoliciesRequest
    completionHandler:(void(^)(int statusCode,IamDescribeRolePoliciesResponse* _Nullable describeRolePoliciesResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    deleteUserAccessKey sync request
    @param deleteUserAccessKeyRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `deleteUserAccessKeyResponse` the request response data model
    */
    -(NSDictionary*) deleteUserAccessKeySyncWithRequest:(IamDeleteUserAccessKeyRequest*) deleteUserAccessKeyRequest;

    -(void)deleteUserAccessKeyAsyncWithRequest:(IamDeleteUserAccessKeyRequest*) deleteUserAccessKeyRequest
    completionHandler:(void(^)(int statusCode,IamDeleteUserAccessKeyResponse* _Nullable deleteUserAccessKeyResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    detachSubUserPolicy sync request
    @param detachSubUserPolicyRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `detachSubUserPolicyResponse` the request response data model
    */
    -(NSDictionary*) detachSubUserPolicySyncWithRequest:(IamDetachSubUserPolicyRequest*) detachSubUserPolicyRequest;

    -(void)detachSubUserPolicyAsyncWithRequest:(IamDetachSubUserPolicyRequest*) detachSubUserPolicyRequest
    completionHandler:(void(^)(int statusCode,IamDetachSubUserPolicyResponse* _Nullable detachSubUserPolicyResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeUserAccessKeys sync request
    @param describeUserAccessKeysRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeUserAccessKeysResponse` the request response data model
    */
    -(NSDictionary*) describeUserAccessKeysSyncWithRequest:(IamDescribeUserAccessKeysRequest*) describeUserAccessKeysRequest;

    -(void)describeUserAccessKeysAsyncWithRequest:(IamDescribeUserAccessKeysRequest*) describeUserAccessKeysRequest
    completionHandler:(void(^)(int statusCode,IamDescribeUserAccessKeysResponse* _Nullable describeUserAccessKeysResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    attachGroupPolicy sync request
    @param attachGroupPolicyRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `attachGroupPolicyResponse` the request response data model
    */
    -(NSDictionary*) attachGroupPolicySyncWithRequest:(IamAttachGroupPolicyRequest*) attachGroupPolicyRequest;

    -(void)attachGroupPolicyAsyncWithRequest:(IamAttachGroupPolicyRequest*) attachGroupPolicyRequest
    completionHandler:(void(^)(int statusCode,IamAttachGroupPolicyResponse* _Nullable attachGroupPolicyResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    updateSubUser sync request
    @param updateSubUserRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `updateSubUserResponse` the request response data model
    */
    -(NSDictionary*) updateSubUserSyncWithRequest:(IamUpdateSubUserRequest*) updateSubUserRequest;

    -(void)updateSubUserAsyncWithRequest:(IamUpdateSubUserRequest*) updateSubUserRequest
    completionHandler:(void(^)(int statusCode,IamUpdateSubUserResponse* _Nullable updateSubUserResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeGroupSubUsers sync request
    @param describeGroupSubUsersRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeGroupSubUsersResponse` the request response data model
    */
    -(NSDictionary*) describeGroupSubUsersSyncWithRequest:(IamDescribeGroupSubUsersRequest*) describeGroupSubUsersRequest;

    -(void)describeGroupSubUsersAsyncWithRequest:(IamDescribeGroupSubUsersRequest*) describeGroupSubUsersRequest
    completionHandler:(void(^)(int statusCode,IamDescribeGroupSubUsersResponse* _Nullable describeGroupSubUsersResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    createPermission sync request
    @param createPermissionRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `createPermissionResponse` the request response data model
    */
    -(NSDictionary*) createPermissionSyncWithRequest:(IamCreatePermissionRequest*) createPermissionRequest;

    -(void)createPermissionAsyncWithRequest:(IamCreatePermissionRequest*) createPermissionRequest
    completionHandler:(void(^)(int statusCode,IamCreatePermissionResponse* _Nullable createPermissionResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    detachGroupPolicy sync request
    @param detachGroupPolicyRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `detachGroupPolicyResponse` the request response data model
    */
    -(NSDictionary*) detachGroupPolicySyncWithRequest:(IamDetachGroupPolicyRequest*) detachGroupPolicyRequest;

    -(void)detachGroupPolicyAsyncWithRequest:(IamDetachGroupPolicyRequest*) detachGroupPolicyRequest
    completionHandler:(void(^)(int statusCode,IamDetachGroupPolicyResponse* _Nullable detachGroupPolicyResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeRole sync request
    @param describeRoleRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeRoleResponse` the request response data model
    */
    -(NSDictionary*) describeRoleSyncWithRequest:(IamDescribeRoleRequest*) describeRoleRequest;

    -(void)describeRoleAsyncWithRequest:(IamDescribeRoleRequest*) describeRoleRequest
    completionHandler:(void(^)(int statusCode,IamDescribeRoleResponse* _Nullable describeRoleResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    updateAssumeRolePolicy sync request
    @param updateAssumeRolePolicyRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `updateAssumeRolePolicyResponse` the request response data model
    */
    -(NSDictionary*) updateAssumeRolePolicySyncWithRequest:(IamUpdateAssumeRolePolicyRequest*) updateAssumeRolePolicyRequest;

    -(void)updateAssumeRolePolicyAsyncWithRequest:(IamUpdateAssumeRolePolicyRequest*) updateAssumeRolePolicyRequest
    completionHandler:(void(^)(int statusCode,IamUpdateAssumeRolePolicyResponse* _Nullable updateAssumeRolePolicyResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describeRoles sync request
    @param describeRolesRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describeRolesResponse` the request response data model
    */
    -(NSDictionary*) describeRolesSyncWithRequest:(IamDescribeRolesRequest*) describeRolesRequest;

    -(void)describeRolesAsyncWithRequest:(IamDescribeRolesRequest*) describeRolesRequest
    completionHandler:(void(^)(int statusCode,IamDescribeRolesResponse* _Nullable describeRolesResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    deleteGroup sync request
    @param deleteGroupRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `deleteGroupResponse` the request response data model
    */
    -(NSDictionary*) deleteGroupSyncWithRequest:(IamDeleteGroupRequest*) deleteGroupRequest;

    -(void)deleteGroupAsyncWithRequest:(IamDeleteGroupRequest*) deleteGroupRequest
    completionHandler:(void(^)(int statusCode,IamDeleteGroupResponse* _Nullable deleteGroupResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describePermissionDetail sync request
    @param describePermissionDetailRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describePermissionDetailResponse` the request response data model
    */
    -(NSDictionary*) describePermissionDetailSyncWithRequest:(IamDescribePermissionDetailRequest*) describePermissionDetailRequest;

    -(void)describePermissionDetailAsyncWithRequest:(IamDescribePermissionDetailRequest*) describePermissionDetailRequest
    completionHandler:(void(^)(int statusCode,IamDescribePermissionDetailResponse* _Nullable describePermissionDetailResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    addPermissionsToSubUser sync request
    @param addPermissionsToSubUserRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `addPermissionsToSubUserResponse` the request response data model
    */
    -(NSDictionary*) addPermissionsToSubUserSyncWithRequest:(IamAddPermissionsToSubUserRequest*) addPermissionsToSubUserRequest;

    -(void)addPermissionsToSubUserAsyncWithRequest:(IamAddPermissionsToSubUserRequest*) addPermissionsToSubUserRequest
    completionHandler:(void(^)(int statusCode,IamAddPermissionsToSubUserResponse* _Nullable addPermissionsToSubUserResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    describePolicy sync request
    @param describePolicyRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `describePolicyResponse` the request response data model
    */
    -(NSDictionary*) describePolicySyncWithRequest:(IamDescribePolicyRequest*) describePolicyRequest;

    -(void)describePolicyAsyncWithRequest:(IamDescribePolicyRequest*) describePolicyRequest
    completionHandler:(void(^)(int statusCode,IamDescribePolicyResponse* _Nullable describePolicyResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    createUserAccessKey sync request
    @param createUserAccessKeyRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `createUserAccessKeyResponse` the request response data model
    */
    -(NSDictionary*) createUserAccessKeySyncWithRequest:(IamCreateUserAccessKeyRequest*) createUserAccessKeyRequest;

    -(void)createUserAccessKeyAsyncWithRequest:(IamCreateUserAccessKeyRequest*) createUserAccessKeyRequest
    completionHandler:(void(^)(int statusCode,IamCreateUserAccessKeyResponse* _Nullable createUserAccessKeyResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    removeSubUserFromGroup sync request
    @param removeSubUserFromGroupRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `removeSubUserFromGroupResponse` the request response data model
    */
    -(NSDictionary*) removeSubUserFromGroupSyncWithRequest:(IamRemoveSubUserFromGroupRequest*) removeSubUserFromGroupRequest;

    -(void)removeSubUserFromGroupAsyncWithRequest:(IamRemoveSubUserFromGroupRequest*) removeSubUserFromGroupRequest
    completionHandler:(void(^)(int statusCode,IamRemoveSubUserFromGroupResponse* _Nullable removeSubUserFromGroupResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    deleteRole sync request
    @param deleteRoleRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `deleteRoleResponse` the request response data model
    */
    -(NSDictionary*) deleteRoleSyncWithRequest:(IamDeleteRoleRequest*) deleteRoleRequest;

    -(void)deleteRoleAsyncWithRequest:(IamDeleteRoleRequest*) deleteRoleRequest
    completionHandler:(void(^)(int statusCode,IamDeleteRoleResponse* _Nullable deleteRoleResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;
    /**
    enableSubUserAccessKey sync request
    @param enableSubUserAccessKeyRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
            `enableSubUserAccessKeyResponse` the request response data model
    */
    -(NSDictionary*) enableSubUserAccessKeySyncWithRequest:(IamEnableSubUserAccessKeyRequest*) enableSubUserAccessKeyRequest;

    -(void)enableSubUserAccessKeyAsyncWithRequest:(IamEnableSubUserAccessKeyRequest*) enableSubUserAccessKeyRequest
    completionHandler:(void(^)(int statusCode,IamEnableSubUserAccessKeyResponse* _Nullable enableSubUserAccessKeyResponse, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;

    /**
    iam common sync request
    @param  jdcloudDataRequest request param
    @return key `statusCode` http request status code type is int
            `dataResult` the http request response data  type is NSData
            `requestError` the request error type is NSError
    */
    -(NSDictionary*) iamCommonSyncWithRequest:(JDCloudDataRequest*) jdcloudDataRequest
                                           url:(NSString*) url
                                        method:(NSString*) method;

    -(void)iamCommonAsyncWithRequest:(JDCloudDataRequest*) jdcloudDataRequest
                                  url:(NSString*) url
                               method:(NSString*) method
                    completionHandler:(void(^)(int statusCode, NSData* _Nullable responseData,NSError * _Nullable error))completionHandler;

    @end


    #endif /* IamClient_h */
